package com.sgv.model.servico;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;

import com.archtecture.control.exceptions.NegocioException;
import com.archtecture.control.facedes.PersistenceFacadeLocal;
import com.sgv.model.entities.CategoriaModel;
import com.sgv.model.entities.ProdutoModel;

public class ImportacaoProdutosService {

	public void importarProdutos(PersistenceFacadeLocal pFacade) {

		try {

			InputStream is = new FileInputStream("E://arquivo.csv");

			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);

			String sql = br.readLine();

			while (sql != null) {
				System.out.println(sql);
				prepararProduto(pFacade, sql);
				sql = br.readLine();
			}
		}
		catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		catch (IOException e) {
			e.printStackTrace();
		}
		catch (NegocioException e) {
			e.printStackTrace();
		}

	}

	private void prepararProduto(PersistenceFacadeLocal pFacade, String pLinha) throws NegocioException {

		String[] lCelulas = pLinha.split(";");
		String lNomeCategoria = null;
		if (lCelulas.length > 4) {
			lNomeCategoria = lCelulas[4];
		}
		else {
			lNomeCategoria = "<<NAO IDENTIFICADA>>";
		}

		CategoriaModel lCategoria = new CategoriaModel();
		lCategoria.setNome(lNomeCategoria);
		List<CategoriaModel> lListCategoria = pFacade.pesquisarLista(lCategoria, null);

		if (!lListCategoria.isEmpty()) {
			lCategoria = lListCategoria.iterator().next();
		}
		else {
			lCategoria = pFacade.inserir(lCategoria);
		}

		ProdutoModel lProduto = new ProdutoModel();

		lProduto.setCategoria(lCategoria);
		lProduto.setNome(lCelulas[0].replace("'", " "));
		lProduto.setCodigo(Long.valueOf(lCelulas[1].replaceAll(" ", "").replaceAll("[^0-9]", "")));
		lProduto.setValorCusto(Double.valueOf(lCelulas[2].replace("R$", "").replace(",", ".").trim()));
		lProduto.setQuantidadeEstoque(0);

		List<ProdutoModel> lListProduto = pFacade.pesquisarLista(lProduto, null);

		if (lListProduto.isEmpty()) {
			pFacade.inserir(lProduto);
		}
	}
}
